# 封装一个函数，每次调用的时候，让数字自增1
# todo：下面的案例是错误的
def func1():
    num = 0
    num+=1
    return num
"""
print(func1()) # 1
print(func1()) # 1
print(func1()) # 1
print(func1()) # 1
print(func1()) # 1
"""
# 用闭包来实现
"""
父函数嵌套子函数，子函数修改父函数变量的地址值，return返回的时候，是返回子函数的地址值
"""
def func2():
    num = 0
    def func3(): # nonlocal：引用局部变量的方法
        nonlocal num # 这里引用了下父函数的num值
        num += 1
        return num
    return func3 # return的是func的地址值

print(func2()) # 带了括号，相当于调用了func2的函数。这里打印的是func3的地址值
print(func2()()) # 调用了func3的函数 1
print(func2()()) # 调用了func3的函数 1
print("===============")
# 递增的话，就需要把值赋值给一个变量
ff = func2()
print(ff()) # 1
print(ff()) # 2
print(ff()) # 3

"""num = func2()
# print(num) # 地址值，谁的地址值？ func3的地址值
print(num()) # 1
print(num()) # 2
print(num()) # 3
print(num()) # 4

print(func2()()) # func3()"""

